package com.xu.springboot.pojo;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    /**
     * 对应数据库中的主键（uuid、自增 id、雪花算法、redis、zookeeper)
     *
     * ID_WORKER: 全局唯一 ID
     *
     * 雪花算法：snowflake 是 Twitter 开源的分布式 ID 生成算法，结果是一个 long 型的 ID。其核心思想是：使用 41bit
     * 作为毫秒数，10bit 作为机器的 ID（5 个 bit 是数据中心，5 个 bit 的机器 ID），12bit 作为毫秒内的流水号（意味
     * 着每个节点在每毫秒可以产生 4096 个 ID），最后还有一个符号位，永远是 0。可以保证几乎全球唯一！
     *
     * AUTO: 自增主键
     *
     * 实体类字段上 @TableId(type = IdType.AUTO)
     * 数据库字段一定要是自增
     *
     * NONE：未设置主键
     *
     * INPUT：手动输入
     *
     * UUID：全局唯一 id，使用 UUID 来生成全局 ID
     *
     * ID_WORKER_STR：ID_WORKER 字符串表示法
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    // 字段添加自动填充内容
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    // 物理删除：从数据库中直接移除
    // 逻辑删除：再数据库中没有被移除，而是通过一个变量来让他失效！ deleted = 0 => deleted = 1
    // 管理员可以查看被删除的记录！防止数据的丢失，类似于回收站！
    // 逻辑删除
    @TableLogic
    private Integer deleted;

}
